Package org.python.pydev.red_core

Source Code of org.python.pydev.red_core.AddRedCorePreferences

/**
* Copyright (c) 2005-2011 by Appcelerator, Inc. All Rights Reserved.
* Licensed under the terms of the Eclipse Public License (EPL).
* Please see the license.txt included with this distribution for details.
* Any modifications to this file must keep this entire header intact.
*/
package org.python.pydev.red_core;

import org.eclipse.jface.preference.IPreferenceStore;
import org.eclipse.jface.text.TextAttribute;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.SelectionAdapter;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.events.SelectionListener;
import org.eclipse.swt.graphics.Font;
import org.eclipse.swt.graphics.FontData;
import org.eclipse.swt.graphics.RGB;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.widgets.Button;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Label;
import org.eclipse.ui.preferences.IWorkbenchPreferenceContainer;
import org.python.pydev.editor.preferences.PydevEditorPrefs;
import org.python.pydev.plugin.preferences.IPydevPreferencesProvider;
import org.python.pydev.plugin.preferences.IPydevPreferencesProvider2;
import org.python.pydev.red_core.preferences.PydevRedCorePreferencesInitializer;
import org.python.pydev.utils.LabelFieldEditor;
import org.python.pydev.utils.LinkFieldEditor;

import com.aptana.editor.common.CommonEditorPlugin;
import com.aptana.theme.IThemeManager;
import com.aptana.theme.Theme;
import com.aptana.theme.ThemePlugin;

/**
* Adds the colors of the Aptana theming to the pydev syntax tokens.
*/
public class AddRedCorePreferences implements IPydevPreferencesProvider, IPydevPreferencesProvider2 {

    public IPreferenceStore[] getPreferenceStore() {
        if (!AddRedCoreThemeAvailable.isRedCoreAvailableForTheming()) {
            return null;
        }
        return new IPreferenceStore[] { ThemePlugin.getDefault().getPreferenceStore(),
                CommonEditorPlugin.getDefault().getPreferenceStore(), };
    }

    public boolean isColorOrStyleProperty(String property) {
        if (!AddRedCoreThemeAvailable.isRedCoreAvailableForTheming()) {
            return false;
        }
        if (property.equals(IThemeManager.THEME_CHANGED)) {
            return true;
        }
        return false;
    }

    private TextAttribute getFromTheme(String name) {
        if (!AddRedCoreThemeAvailable.isRedCoreAvailableForTheming()) {
            return null;
        }
        Theme currentTheme = ThemePlugin.getDefault().getThemeManager().getCurrentTheme();
        return currentTheme.getTextAttribute(name);
    }

    public TextAttribute getKeywordTextAttribute() {
        return getFromTheme("keyword.py");
    }

    public TextAttribute getSelfTextAttribute() {
        return getFromTheme("keyword.other.self.py");
    }

    public TextAttribute getCodeTextAttribute() {
        return getFromTheme("source.py");
    }

    public TextAttribute getDecoratorTextAttribute() {
        return getFromTheme("storage.type.annotation.py");
    }

    public TextAttribute getNumberTextAttribute() {

        return getFromTheme("constant.numeric.py");
    }

    public TextAttribute getClassNameTextAttribute() {

        return getFromTheme("entity.name.class.py");
    }

    public TextAttribute getFuncNameTextAttribute() {

        return getFromTheme("entity.name.function.py");
    }

    public TextAttribute getCommentTextAttribute() {

        return getFromTheme("comment.py");
    }

    public TextAttribute getBackquotesTextAttribute() {

        return getFromTheme("support.type.py");
    }

    public TextAttribute getParensTextAttribute() {
        return getFromTheme("source.parens.py");
    }

    public TextAttribute getOperatorsTextAttribute() {
        return getFromTheme("source.operators.py");
    }

    public TextAttribute getStringTextAttribute() {

        return getFromTheme("string.py");
    }

    public TextAttribute getConsoleErrorTextAttribute() {
        return getFromTheme("console.error.py");
    }

    public TextAttribute getConsoleOutputTextAttribute() {
        return getFromTheme("console.output.py");
    }

    public TextAttribute getConsoleInputTextAttribute() {
        return getFromTheme("console.input.py");
    }

    public TextAttribute getConsolePromptTextAttribute() {
        return getFromTheme("console.prompt.py");
    }

    public TextAttribute getHyperlinkTextAttribute() {
        return getFromTheme("hyperlink.py");
    }

    public RGB getConsoleBackgroundRGB() {
        if (!AddRedCoreThemeAvailable.isRedCoreAvailableForTheming()) {
            return null;
        }
        Theme currentTheme = ThemePlugin.getDefault().getThemeManager().getCurrentTheme();
        return currentTheme.getBackground();
    }

    protected Button addUseAptanaThemesCheckbox(final Composite parent, String label) {
        final Button checkBox = new Button(parent, SWT.CHECK);
        checkBox.setText(label);

        GridData gd = new GridData(GridData.HORIZONTAL_ALIGN_BEGINNING);
        gd.horizontalSpan = 2;
        checkBox.setLayoutData(gd);
        checkBox.setSelection(PydevRedCorePreferencesInitializer.getUseAptanaThemes());

        final Label labelReUseAptanaThemes = addLabel(parent, "");
        checkBox.addSelectionListener(new SelectionAdapter() {
            public void widgetSelected(SelectionEvent e) {
                PydevRedCorePreferencesInitializer.setUseAptanaThemes(checkBox.getSelection());
                labelReUseAptanaThemes
                        .setText("Restart required!\nMeanwhile, new and existing editors (or other widgets) may not function properly.\n\n");
                labelReUseAptanaThemes.setForeground(labelReUseAptanaThemes.getDisplay().getSystemColor(SWT.COLOR_RED));
                parent.layout();
            }

        });

        return checkBox;
    }

    protected Label addLabel(Composite parent, String label) {
        Label labelWidget = new Label(parent, SWT.None);
        labelWidget.setText(label);

        GridData gd = new GridData(GridData.HORIZONTAL_ALIGN_BEGINNING);
        gd.horizontalSpan = 2;
        labelWidget.setLayoutData(gd);

        return labelWidget;
    }

    public boolean createColorOptions(Composite appearanceComposite, final PydevEditorPrefs prefs) {
        if (!AddRedCoreThemeAvailable.isRedCoreAvailable()) {
            return false;
        }

        addUseAptanaThemesCheckbox(appearanceComposite, "Use aptana themes? (restart required)");

        if (!PydevRedCorePreferencesInitializer.getUseAptanaThemes()) {
            return false;
        }

        LinkFieldEditor colorsAndFontsLinkFieldEditor = new LinkFieldEditor("UNUSED",
                "Colors handled through <a>Aptana Themes</a>\n", appearanceComposite, new SelectionListener() {

                    public void widgetSelected(SelectionEvent e) {
                        String id = "com.aptana.theme.preferencePage";
                        IWorkbenchPreferenceContainer workbenchPreferenceContainer = ((IWorkbenchPreferenceContainer) prefs
                                .getContainer());
                        workbenchPreferenceContainer.openPage(id, null);
                    }

                    public void widgetDefaultSelected(SelectionEvent e) {
                    }
                });
        colorsAndFontsLinkFieldEditor.getLinkControl(appearanceComposite);

        LabelFieldEditor labelFieldEditor = new LabelFieldEditor("UNUSED", "Scopes used in Aptana Themes:\n\n"
                + "Code:          source                   " +
                "Backquotes: support.type\n" +
                "Keywords:      keyword                  " +
                "{}, [], (): source.parens\n" +
                "Self:          keyword.other.self       " +
                "Comments:   comment\n" +
                "Decorators:    storage.type.annotation  " +
                "Strings:    string\n" +
                "Numbers:       constant.numeric         " +
                "Stderr:     console.error\n" +
                "Class name:    entity.name.class        " +
                "Stdout:     console.output\n" +
                "Function name: entity.name.function     " +
                "Input:      console.input\n" +
                "Operators:     source.operators         " +
                "Prompt:     console.prompt\n" + "", appearanceComposite);
        Label labelControl = labelFieldEditor.getLabelControl(appearanceComposite);
        try {
            FontData labelFontData = new FontData("Courier New", 8, SWT.NONE);
            labelControl.setFont(new Font(labelControl.getDisplay(), labelFontData));
        } catch (Throwable e) {
            //ignore
        }

        prefs.setUpdateLabelExampleOnPrefsChanges();
        return true;

    }

}
TOP

Related Classes of org.python.pydev.red_core.AddRedCorePreferences

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.